//
// Created by 86152 on 2021/5/4.
//

#ifndef CTEST_PART5_H
#define CTEST_PART5_H

#include "Utils.h"


// 二叉树的遍历与线索二叉树
namespace part5_binaryTree{

    class tree{
    public:
        explicit tree(int num); //禁止隐式构造
        ~tree();

        // 非递归遍历二叉树
        void iter_pre_order();
        void iter_in_order();
        void iter_post_order();
        void iter_level_order();

        // 递归遍历二叉树
        void recu_pre_order(int node);
        void recu_in_order(int node);
        void recu_post_order(int node);


    private:
        int* root;
        int size;
        void visit(int i);
        void pre_visit(const char* msg);
        void post_visit(const char* msg);
    };

    void test();
}

// 线索二叉树
namespace part5_threadTree{
    void pre_thread(Utils::ThreadTreeNode* root ,Utils::ThreadTreeNode** pre);
    void order_thread(Utils::ThreadTreeNode* root ,Utils::ThreadTreeNode** pre);
    void post_thread(Utils::ThreadTreeNode* root ,Utils::ThreadTreeNode** pre);

    // 测试二叉树的前序，中序，后序线索化
    void test();
}

#endif //CTEST_PART5_H
